package com.molichuxing.services.infrastructure.dao;

import com.molichuxing.framework.dao.RootMapper;
import com.molichuxing.services.infrastructure.bean.EnterpriseBean;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface EnterpriseMapper extends RootMapper<EnterpriseBean> {

    /**
     * 根据订单号获取订单信息
     *
     * @param orderCode 订单号
     * @return
     */
    EnterpriseBean getByOrderCode(Long orderCode);

    /**
     * 根据订单号list获取订单信息
     *
     * @param orderCodes 订单号list
     * @return
     */
    List<EnterpriseBean> getEnterpriseListByOrderCodes(@Param("orderCodes") List<Long> orderCodes);

    /**
     * 续订修改主订单
     *
     * @param orderCode      订单号
     * @param isHaveSuborder
     * @return
     */
    int modifyHaveSuborder(@Param("orderCode") Long orderCode, @Param("isHaveSuborder") boolean isHaveSuborder);

    /**
     * 根据订单号修改订单状态
     *
     * @param orderCode 订单号
     * @param oldState  旧状态
     * @param newState  新状态
     * @return
     */
    int modifyState(@Param("orderCode") Long orderCode, @Param("oldState") int oldState, @Param("newState") int newState);

    /**
     * 查询固定日订单
     *
     * @param dayInt
     * @param localDate
     * @return
     */
    List<EnterpriseBean> listOrderEnterpriseByDay(@Param("dayInt") List<Integer> dayInt, @Param("localDate") LocalDate localDate);

    /**
     * 根据条件分页查询count
     *
     * @param params
     * @return
     */
    long getPageCount(@Param("params") Map<String, Object> params);

    /**
     * 根据条件分页查询
     *
     * @param params
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<EnterpriseBean> getPage(@Param("params") Map<String, Object> params, @Param("pageNum") int pageNum,
                                 @Param("pageSize") int pageSize);

    /**
     * 根据企业id查询订单
     *
     * @param enterpriseId
     * @return
     */
    List<EnterpriseBean> getByEnterpriseId(@Param("enterpriseId") Integer enterpriseId);

    /**
     * 根据时间查询订单
     *
     * @param params
     * @return
     */
    List<EnterpriseBean> getByDate(@Param("params") Map<String, Object> params);

    /**
     * 根据父订单号集合查询子订单
     *
     * @param parentOrderCodes
     * @return
     */
    List<EnterpriseBean> getByParendCodes(@Param("parentOrderCodes") List<Long> parentOrderCodes);

    /**
     * 根据到期时间查询到期订单
     *
     * @param leaseExpire
     * @return
     */
    List<EnterpriseBean> getExpire(@Param("leaseExpire") LocalDate leaseExpire);

    /**
     * 根据父订单号查询订单信息
     *
     * @param parentOrderCode 父订单号
     * @return
     */
    EnterpriseBean getEnterpriseByParentOrderCode(@Param("parentOrderCode") Long parentOrderCode);

    /**
     * 根据起租日获取续订信息
     *
     * @param leaseInception 起租日
     * @param unhireState    待起租状态
     * @return
     */
    List<EnterpriseBean> getRenewLease(@Param("leaseInception") LocalDate leaseInception, @Param("unhireState") int unhireState);

    /**
     * 起租确认
     */
    int modifyLeaseConfirm(
            @Param("orderCode") Long orderCode, @Param("oldState") Integer oldState,
            @Param("newState") Integer newState, @Param("leaseInception") LocalDate leaseInception, @Param("leaseExpire") LocalDate leaseExpire);
}